package gui;

import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

import tesauro.CargadorMasivoArchivoTexto;
import tesauro.DiccionarioSinonimos;
import tesauro.ListaLexicografica;

public class PanelListado extends javax.swing.JPanel{
	
	private DefaultMutableTreeNode diccionario;
	private DefaultTreeModel modelo;
	private JTree tree;
	private JFrame v;
	private JScrollPane scroll;
	private static String ROOT = "Diccionario Sinonimos";
	private static int X = 300;
	private static int Y = 100;
	private static int HEIGHT = 600;
	private static int WIDTH = 300;
	
	public PanelListado(){
		diccionario = new DefaultMutableTreeNode(ROOT);
		modelo = new DefaultTreeModel( diccionario );
		tree = new JTree(modelo);
		scroll = new JScrollPane(tree);
		v = new JFrame();
	}
	
	public void cargarTree(TreeMap<String,List<String>> treeMap){
			
		Set keySet = treeMap.descendingKeySet();
		
		Iterator iter = keySet.iterator();
		
		DefaultMutableTreeNode palabraPadre;
		DefaultMutableTreeNode sinonimoHijo;
		
		while( iter.hasNext() ){
			String llave = (String) iter.next();
			if(treeMap.get(llave) != null){
				palabraPadre = new DefaultMutableTreeNode( llave );			
				modelo.insertNodeInto( palabraPadre ,diccionario,0 );
				for(int i = 0; i < treeMap.get(llave).size() ; i++){
					sinonimoHijo = new DefaultMutableTreeNode( treeMap.get( llave ).get(i).toString() );
					modelo.insertNodeInto(sinonimoHijo, palabraPadre, i);
				}												
				//System.out.println("Key: "+ llave +" - value: "+ treeMap.get(llave).toString());
			}
		 }
		expandAll(tree);
	}
	
	public void showList(){				
		v.getContentPane().add(scroll);		
		v.pack();
		v.setBounds(X,Y,WIDTH,HEIGHT);		
		v.setVisible(true);		
	}
	
	public void expandAll(JTree tree) {
	    int row = 0;
	    tree.expandRow(row);	     
	}
	
	public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
            	 ListaLexicografica listLexi = new ListaLexicografica(); 
            	 PanelListado panel = new PanelListado();
            	 UTgetListadoTree(listLexi,panel);                 
            }
        });
    }
	
	private static void UTgetListadoTree(ListaLexicografica listLexi, PanelListado panel ){		
		boolean s = true;      
        try{
        	JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir") + File.separator + "data");
        	fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
            int result = fileChooser.showOpenDialog(new JPanel());

            if (result == JFileChooser.APPROVE_OPTION) {
               
				File archivo = fileChooser.getSelectedFile();
				DiccionarioSinonimos diccionario = new DiccionarioSinonimos();
				diccionario.cargarMasivamente(new CargadorMasivoArchivoTexto(archivo));    		
				TreeMap<String,List<String>> treeMap = listLexi.sorted(diccionario);
				panel.cargarTree( treeMap );
				panel.showList();
				System.out.println( treeMap.toString() +"\n");
				
			}       	
        	
        }catch(Exception e){
        	System.out.println("Error al obtener el listado " + e.getMessage());
        }
        
	}
	
}